package Day012_多线程2.demo03_并发包;

import java.util.concurrent.Exchanger;

/**
 * @author zhangyan
 * @date 2020/4/30 15:25
 */
/*
    Exchanger（交换者）是一个用于线程间协作的工具类。  Exchanger用于进行线程间的数据交换。

    这两个线程通过exchange方法交换数据，如果第一个线程先执行exchange()方法，它会一直等待第二个线程也执
    行exchange方法，当两个线程都到达同步点时，这两个线程就可以交换数据，将本线程生产出来的数据传递给对方。

    Exchanger构造方法：public Exchanger()

    Exchanger重要方法：public V exchange(V x)

 */
public class demo08_Exchanger {
    public static void main(String[] args) {

        //
        Exchanger<String> ex = new Exchanger<>();
        //创建任务
        MyRunnable6 mr6 = new MyRunnable6(ex);
        new Thread(mr6).start();

        MyRunnable7 mr7 = new MyRunnable7(ex);
        new Thread(mr7).start();
    }
}


class MyRunnable6 implements Runnable{
    //
    Exchanger<String> ex;
    public MyRunnable6(Exchanger<String> ex){
        this.ex = ex;
    }

    @Override
    public void run() {
        try {
            String massage6 = ex.exchange("AAA");
            System.out.println("线程7 传递进来的是:" + massage6);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class MyRunnable7 implements Runnable{
    Exchanger<String> ex;
    public MyRunnable7(Exchanger<String> ex){
        this.ex = ex;
    }
    @Override
    public void run() {
        try {
            String massage7 = ex.exchange("aaa");
            System.out.println("线程6 传递进来的是:" + massage7);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}